﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace GrammarGenericSolver.Model
{
    /// <summary>
    /// Regra de produção de um terminal.
    /// </summary>
    public class Rule
    {
        private List<Symbol> _symbols;
        /// <summary>
        /// Lista de símbolos da regra.
        /// </summary>
        public List<Symbol> Symbols
        {
            get { return _symbols; }
            set { _symbols = value; }
        }

        /// <summary>
        /// Adiciona o símbolo ao fim da regra.
        /// </summary>
        /// <param name="symbol"></param>
        public void AddSymbol(Symbol symbol)
        {
            Symbols.Add(symbol);
        }

        public Rule()
        {
            Symbols = new List<Symbol>();
        }

        /// <summary>
        /// Retorna se a lista de símbolos possui pelo menos 1 símbolo.
        /// </summary>
        /// <returns></returns>
        public bool HasSymbols()
        {
            return Symbols.Count > 0;
        }

        /// <summary>
        /// Retorna verdadeiro caso a regra possua pelo menos um não terminal.
        /// </summary>
        /// <returns></returns>
        public bool HasNonTerminal()
        {
            foreach (Symbol symbol in Symbols)
            {
                if (symbol is NonTerminal)
                {
                    return true;
                }
            }

            return false;
        }
    }
}
